昨天介紹了SQL
,今天就介紹個對立面的NoSQL
吧
NoSQL
是Non SQL
、Not Only SQL
的縮寫,是一種非關聯式資料庫,和昨天介紹的不同是,NoSQL
資料庫是一種非關聯式資料庫,將資料儲存為類似JSON
的文件,並對資料進行查詢。
NoSQL
資料庫整體而言提供促進更快速及更能反覆開發的彈性結構描述。NoSQL
資料庫一般的設計都能透過硬體的分散式叢集來向外擴展,而不必藉由增加昂貴和重量級的伺服器來進行垂直擴展。NoSQL
資料庫針對特定資料模型加以優化,並且存取比使用關聯式資料庫達到相同功能的更高效能模式。NoSQL
資料庫提供專為各別資料模型而建造的高功能API
和資料。關聯式資料庫、SQL | 非關聯式資料庫、NoSQL | |
---|---|---|
特色 | 具有邏輯和特定需求的關聯式資料 | 大型、不相關、不定或快速變化的資料 |
專為關聯式結構所建置的舊版系統 | 效能和可用性比強式一致性更重要的應用程式 | |
需要複雜查詢或多列交易的應用程式 | 服務世界各地使用者的 Always-on 應用程式 | |
- | ||
案例 | 會計、財務和銀行系統 | 行動應用程式 |
庫存管理系統 | 即時分析系統 | |
交易管理系統 | 內容管理系統 |
MongoDB
是一個開源(open source)
的文件資料庫,擁有高靈活性、高可用性及可擴展性,是一種基於文檔的分散式資料庫。是NoSQL
中最多人使用的資料庫系統。
有兩種驅動方式分別是mgo
與mongo-go-driver
,各種比較看起來mgo
比較容易上手,但現在已經不維護了,因此使用Go官方提供的mongo-driver。
go get go.mongodb.org/mongo-driver/mongo
package main
import (
"fmt"
"log"
"context"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
client, err := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017"))
if err!= nil{
log.Fatal(err)
}
}
多import
一個bson
套件
import (
"go.mongodb.org/mongo-driver/bson"
)
選擇要使用的Database
與Collection
,這會先在MongoDB
內建立
collection := client.Database("test").Collection("UserInfo")
res, err := collection.InsertOne(ctx, bson.D{{"name", "pi"}, {"value", 3.14159}})
成功插入資料
collection := client.Database("test").Collection("UserInfo")
cur, err := collection.Find(ctx, bson.D{})
if err != nil {
log.Fatal(err)
}
defer cur.Close(ctx)
for cur.Next(ctx) {
var result bson.M
err := cur.Decode(&result)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%+v\n", result)
}
output:
map[_id:ObjectID("633e6dc269592c53c3fc8fde") name:pi value:3.14159]
map[_id:ObjectID("633e74c57d82deaff3852e28") name:e value:2.71818]
MongoDB
是第一次使用,如預期的一樣很不熟,之後如果有更深的瞭解再回來修正這篇文ˊˇˋ
NoSQL 資料庫 - 什麼是 NoSQL?
https://azure.microsoft.com/zh-tw/resources/cloud-computing-dictionary/what-is-nosql-database/
什麼是SQL?什麼是NOSQL? 用簡單範例看一下他們的差異
https://www.codegym.tech/blog/sql-vs-nosql
什麼是 NoSQL?
https://aws.amazon.com/tw/nosql/
MongoDB Go Driver使用帮助文档
https://mongoing.com/archives/27257
mgo和mongo-go-driver使用心得比較
https://www.gushiciku.cn/pl/25Qw/zh-tw